<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of FornecedorMapper
 *
 * @author felipe
 */
class App_Model_FornecedorMapper extends Voitech_Mapper {
    
    public function __construct(App_Model_Fornecedor $obModel) {
        $this->obModel = $obModel;        
    }
    
    public function buscarPorId() {        
        $obRow = App_Model_Db_Fornecedor::build()->buscarId($this->obModel->getCoFornecedor());
        if(empty($obRow))
        {
            return;
        }
        $this->carregar($obRow);               
        return $this;
    }
    
    public function carregar(stdClass $obRow) {
        $obRepresentanteMapper = new App_Model_RepresentanteMapper(new App_Model_Representante());               
        $this->obModel->setCoFornecedor($obRow->co_fornecedor)
                           ->setNoFornecedor($obRow->no_fornecedor)
                           ->setNuCnpj($obRow->nu_cnpj)
                           ->setNuInscricao($obRow->nu_inscricao)
                           ->setDsEndereco($obRow->ds_endereco)
                           ->setNuTelefone($obRow->nu_telefone)
                           ->setStAtivo($obRow->st_ativo)
                           ->setDtCadastro($obRow->dt_cadastro)
                           ->setExcluir($obRow->excluir)
                           ->setObRepresentante($obRepresentanteMapper->carregar($obRow)->getObModel());
        return $this;
    }    
    
    public function cadastrar() {
        $arFornecedor = $this->retornarArrayPopulado();       
        $arFornecedor['co_pessoa_cadastro'] = $this->obModel->getObUsuarioCadastro()->getCoPessoa();
        return App_Model_Db_Fornecedor::build()->insert($arFornecedor);                                         
    }
    
    public function alterar(){
        $arFornecedor = $this->retornarArrayPopulado();        
        return App_Model_Db_Fornecedor::build()->update($arFornecedor,App_Model_Db_Fornecedor::build()->getAdapter()->quoteInto('co_fornecedor = ?',$this->obModel->getCoFornecedor()));                
    }
    
    public function ativar() {
        if($this->obModel->getCoFornecedor() == ''){
            throw new Voitech_Exception('Falta cod. fornecedor');
        }
        $arrFornecedor = array('st_ativo'=>'S');       
        return App_Model_Db_Fornecedor::build()->update($arrFornecedor,App_Model_Db_Fornecedor::build()->getAdapter()->quoteInto('co_fornecedor = ?',$this->obModel->getCoFornecedor()));                
    }
    
    public function desativar() {
        if($this->obModel->getCoFornecedor() == ''){
            throw new Voitech_Exception('Falta cod. fornecedor');
        }
        $arrFornecedor = array('st_ativo'=>'N');
        return App_Model_Db_Fornecedor::build()->update($arrFornecedor
                                                      ,App_Model_Db_Fornecedor::build()->getAdapter()->quoteInto('co_fornecedor = ?',$this->obModel->getCoFornecedor()));                
    }
    
    public function retornarArrayPopulado() {
        $arrFornecedor = array('no_fornecedor'=>$this->obModel->getNoFornecedor()
                               ,'nu_cnpj'=>$this->obModel->getNuCnpj()
                               ,'nu_inscricao'=>$this->obModel->getNuInscricao());
        if( $this->obModel->getDsEndereco() != '' ) {
            $arrFornecedor['ds_endereco'] = $this->obModel->getDsEndereco();
        }
        if( $this->obModel->getCoFornecedor() != '' ) {
            $arrFornecedor['co_fornecedor'] = $this->obModel->getCoFornecedor();
        }
        if( $this->obModel->getNuTelefone() != '' ) {
            $arrFornecedor['nu_telefone'] = $this->obModel->getNuTelefone();
        }
        if( $this->obModel->getObRepresentante() != '' )
        {
            $arrFornecedor['co_representante'] = $this->obModel->getObRepresentante()->getCoPessoa();
        }
        return $arrFornecedor;
   }
   
    public function excluir() {
        if($this->obModel->getCoFornecedor() == ''){
            throw new Voitech_Exception('Falta cod. fornecedor');
        }
        return App_Model_Db_Fornecedor::build()->delete(App_Model_Db_Fornecedor::build()->getAdapter()->quoteInto('co_fornecedor = ?',$this->obModel->getCoFornecedor()));                
    }   
}